<?php
define('BASEDIR', __DIR__ . '/..');


require_once __DIR__ . '/Loader.php';
spl_autoload_register("\\DesignModel\\Loader::autoload");

/**
 * Class Event
 * @description:观察者使用
 * @time:2018年6月20日14:47:10
 * @Author: yfl
 * @QQ 554665488
 */
class Event
{
    //        传统的模式
    public function trigger()
    {
        echo '一个事件发生后' . "\n";
        //逻辑主体
        echo '逻辑处理1' . "\n";
        echo '逻辑处理2' . "\n";
        echo '逻辑处理3' . "\n";
    }


}

/**
 * Class Event2
 * @description:事件发生者 被观察者
 * @time:2018年6月20日14:56:55
 * @Author: yfl
 * @QQ 554665488
 */
class Event2 extends \DesignModel\Observer\EventGenerator
{
    //使用观察者模式 改变上边的传统模式
    public function trigger()
    {
        echo '一个事件发生后' . "\n";

        //逻辑主体
    }
}

$event2 = new Event2();

$event2->trigger(); //事件发生了 去通知观察者
//定义一个观察者 1
class Observer1 implements \DesignModel\Observer\Observer
{

    public function update($params=null)
    {
        // TODO: Implement update() method.
        echo '业务逻辑1'."\n";
//        echo $params;
    }

}
//定义一个观察者 2
class Observer2 implements \DesignModel\Observer\Observer
{

    public function update($params=null)
    {
        // TODO: Implement update() method.
        echo '业务逻辑2';
//        echo $params;
    }

}
//把定义的观察者 添加到被观察者中 进行解耦
$event2->addObserver(new Observer1());
$event2->addObserver(new Observer2()); //这里可以动态的关闭某一项观察者的逻辑

$event2->notify();
